package com.xch.dao;


import com.xch.bean.Express;
import com.xch.exception.DuplicateCodeException;

import java.util.List;
import java.util.Map;

public interface BaseExpressDao {

    /**
     * 用于查询数据库中的全部快递（总数+新增），待取件快递（总数+新增）
     * @return [{size:总数,day:新增},{size:总数,day:新增}]
     */
    List<Map<String,Integer>> console();

    /**
     * 用于查询所有快递
     * @param limit 是否分页标记，true 分页，false 不分页 查询所有快递
     * @param offset sql语句的起始索引
     * @param pageNumber 每页查询数量
     * @return 快递集合
     */
    List<Express> findAll(boolean limit,int offset,int pageNumber);

    /**
     * 根据快递单号查询快递信息
     * @param number 单号
     * @return 快递信息，不存在时，返回null
     */
    Express findByNumber(String number);

    /**
     * 根据快递取件码查询快递信息
     * @param code 取件码
     * @return 快递信息，不存在时，返回null
     */
    Express findByCode(String code);

    /**
     * 根据手机号查询快递信息
     * @param  userPhone 取件码
     * @return 快递信息列表，不存在时，返回null
     */
    List<Express> findByUserPhone(String userPhone);

    /**
     * 根据手机号查询快递信息
     * @param  userPhone 取件码 status 状态
     * @return 快递信息列表，不存在时，返回null
     */
    List<Express> findByUserPhoneAndStatus(String userPhone,int status);

    /**
     * 根据录入人手机号查询快递信息
     * @param  sysPhone 取件码
     * @return 快递信息列表，不存在时，返回null
     */
    List<Express> findBySysPhone(String sysPhone);

    /**
     * 快递的录入
     * @param e 要录入的对象
     * @return 录入的结果
     */
    boolean insert(Express e) throws DuplicateCodeException;

    /**
     * 快递的修改
     * @param id 要修改的快递id
     * @param newExpress 要修改的快递对象(number,company,username,userPhone)
     * @return 录入的结果
     */
    boolean update(int id,Express newExpress);

    /**
     * 根据id，删除单个快递信息
     * @param id 要删除的快递id
     * @return 删除的结果
     */
    boolean delete(int id);

    /**
     * 确认取件 1表示取件完成
     * @param code 取件码
     * @return 取出的结果
     */
    boolean updateStatus(String code);
}
